/**
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。返回删除后的链表的头节点。
 * 
    输入: head = [4,5,1,9], val = 5
    输出: [4,1,9]
    解释: 给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
 */


// 双指针法；
// 一个前驱指针，一个当前指针
var deleteNode = function(head, val) {
    if (head.val === val) return head.next; // 特殊处理：删除结点为头结点
    let [pre, cur] = [head, head.next];
    while (cur && cur.val !== val) { // 终止条件：当前结点为空或者当前值等于目标值
        [pre, cur] = [cur, cur.next];
    }
    if (cur) {
        pre.next = cur.next;
    }
    return head;
};